#ifndef __PY_INVOKER_H__
#define __PY_INVOKER_H__

#include <Python.h>
#include <string>
#include <map>

using namespace std;

class PyInvoker
{
public:
	PyInvoker(const string path, const string moduleName);
	~PyInvoker();

private:
	string module;
	map<string, PyObject*> pyClassMap;

	PyObject* moduleRef;
	PyObject* getModuleRef(void) { return moduleRef; }
	void setModuleRef(PyObject *ptr) { moduleRef = ptr; }


	void addPath(const string& path);
	void import(const string& moduleName);
	void callMethod(const string& className, const string& methodname, const string& args);
	void constructor(const string& className, const string& initVal);
	PyObject* callFunc(const string& funcName, const string& format, const string& args);

public:
	void run(const string funcName, const string args);
	void run(const string className, const string initArgs, const string methodName, const string args);
};

#endif /** __PY_INVOKER_H__ **/
